package test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 日期工具类
 */
public class DateUtils {

    public static final String PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";
    public static final String PATTERN_DATE = "yyyy-MM-dd";
    public static final String PATTERN_TIME = "HH:mm:ss";

    /**
     * 将Date转换为字符串，使用默认的日期时间格式
     */
    public static String formatDateTime(Date date) {
        return format(date, PATTERN_DATETIME);
    }

    /**
     * 将Date转换为字符串，使用默认的日期格式
     */
    public static String formatDate(Date date) {
        return format(date, PATTERN_DATE);
    }

    /**
     * 将Date转换为字符串，使用默认的时间格式
     */
    public static String formatTime(Date date) {
        return format(date, PATTERN_TIME);
    }

    /**
     * 将Date转换为字符串，使用指定的格式
     */
    public static String format(Date date, String pattern) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        return formatter.format(date);
    }

    /**
     * 将字符串转换为Date，使用默认的日期时间格式
     */
    public static Date parseDateTime(String dateStr) throws ParseException {
        return parse(dateStr, PATTERN_DATETIME);
    }

    /**
     * 将字符串转换为Date，使用默认的日期格式
     */
    public static Date parseDate(String dateStr) throws ParseException {
        return parse(dateStr, PATTERN_DATE);
    }

    /**
     * 将字符串转换为Date，使用默认的时间格式
     */
    public static Date parseTime(String dateStr) throws ParseException {
        return parse(dateStr, PATTERN_TIME);
    }

    /**
     * 将字符串转换为Date，使用指定的格式
     */
    public static Date parse(String dateStr, String pattern) throws ParseException {
        if (dateStr == null || dateStr.trim().isEmpty()) {
            return null;
        }
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        return formatter.parse(dateStr);
    }

    /**
     * 获取当前日期时间字符串，使用默认的日期时间格式
     */
    public static String getCurrentDateTime() {
        return formatDateTime(new Date());
    }

    /**
     * 获取当前日期字符串，使用默认的日期格式
     */
    public static String getCurrentDate() {
        return formatDate(new Date());
    }

    /**
     * 获取当前时间字符串，使用默认的时间格式
     */
    public static String getCurrentTime() {
        return formatTime(new Date());
    }

    /**
     * 将LocalDateTime转换为字符串，使用默认的日期时间格式
     */
    public static String formatLocalDateTime(LocalDateTime dateTime) {
        if (dateTime == null) {
            return null;
        }
        return dateTime.format(DateTimeFormatter.ofPattern(PATTERN_DATETIME));
    }

    /**
     * 将字符串转换为LocalDateTime，使用默认的日期时间格式
     */
    public static LocalDateTime parseLocalDateTime(String dateTimeStr) {
        if (dateTimeStr == null || dateTimeStr.trim().isEmpty()) {
            return null;
        }
        return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern(PATTERN_DATETIME));
    }
}